using System;

/* 查看元数据
    它允许在运行时查看特性（attribute）信息。
    它允许审查集合中的各种类型，以及实例化这些类型。
    它允许延迟绑定的方法和属性（property）。
    它允许在运行时创建新类型，然后使用这些类型执行一些任务。
*/
//System.Reflection 类的 MemberInfo 对象需要被初始化，用于发现与类相关的特性（attribute）。为了做到这点，您可以定义目标类的一个对象
//System.Reflection.MemberInfo info = typeof(MyClass); 实现类的反射
[AttributeUsage(AttributeTargets.All)]
public class HelpAttribute : System.Attribute
{
    public readonly string Url;

    public string Topic  // Topic 是一个命名（named）参数
    {
        get
        {
            return topic;
        }
        set
        {
            topic = value;
        }
    }

    public HelpAttribute(string url)  // url 是一个定位（positional）参数
    {
        this.Url = url;
    }

    private string topic;
    }
    [HelpAttribute("Information on the class MyClass")]
    class MyClass
    {
    }

namespace AttributeAppl
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Reflection.MemberInfo info = typeof(MyClass);
            object[] attributes = info.GetCustomAttributes(true);
            for (int i = 0; i < attributes.Length; i++)
            {
            System.Console.WriteLine(attributes[i]);
            }
            Console.ReadKey();
        }
    }
}

//HelpAttribute